/**
 *
 */
package com.czmh.etc.onlinepubsys.services.impl;

import java.io.IOException;
import java.util.Date;

import com.czmh.etc.onlinepubsys.utils.mingchuang.PayUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.czmh.etc.common.core.utils.Sequence;
import com.czmh.etc.common.core.utils.UUIDGenerator;
import com.czmh.etc.onlinepubsys.json.JsonResult;
import com.czmh.etc.onlinepubsys.maper.SysFileMapper;
import com.czmh.etc.onlinepubsys.model.SysFile;
import com.czmh.etc.onlinepubsys.services.SysFileService;
import com.czmh.etc.onlinepubsys.utils.AliyunOssUtil;
import com.czmh.etc.onlinepubsys.utils.DatetimeUtil;
import com.czmh.etc.onlinepubsys.utils.JsonResultUtil;

import lombok.extern.slf4j.Slf4j;

/**
 * @描述：
 * @author： Seven.
 * @创建日期：Jun 10, 2019 9:29:52 PM.
 * @版本：1.0.0
 */
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class SysFileServiceImpl implements SysFileService {
    @Autowired
    private AliyunOssUtil  aliyunOssUtil;
    @Autowired
    private SysFileMapper sysFileMapper;

    @Override
    public void save(SysFile file) {
        sysFileMapper.insert(file);
    }

    @Override
    public JsonResult saveFileToOss(String userId, MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        /**
         * 修改文件名称并保存文件
         */
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        String uuid = DatetimeUtil.formatDate(new Date(), DatetimeUtil.DATETIME_PATTERN) + "-" + UUIDGenerator.generateShortUuid();
        fileName = uuid + suffix;
        /**
         * 阿里云
         */
        String path = "exet" + "/" + DatetimeUtil.formatDate(new Date(), "yyyyMMdd") + "/"
                + PayUtil.generateOrderNo() + suffix;
        String uri = aliyunOssUtil.upload(file.getInputStream(), path);
        if(StringUtils.isEmpty(uri)){
            log.error(String.format("上传OSS失败，用户id：%s 文件名：%s", userId, path));
            return JsonResultUtil.toErrorResult("上传OSS失败");
        }
        // 保存数据库
        SysFile sysFile = new SysFile(Sequence.getId());
        sysFile.setFile_bytes(file.getSize());
        sysFile.setFile_createtime(new Date());
        sysFile.setFile_delstatus(false);
        sysFile.setFile_path(uri);
        sysFile.setFile_createid(userId);
        sysFile.setFile_type(suffix);
        sysFile.setFile_notes("");
        sysFile.setFile_ext(suffix);
        sysFile.setFile_name(fileName);
        save(sysFile);
        log.info(String.format("上传OSS完成，用户id：%s 文件名：%s", userId, path));
        return JsonResultUtil.toResult(uri);
    }
}
